﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using SAAC.DTO;
using System.Data;


namespace SAAC.DAL
{
	public class AnexoDAL : DALBase
	{
		
		public AnexoDTO Select(AnexoDTO dto, string order = null)
		{
			try
			{
				string sql = "CALL sp_anexo_sel(@id,@nome,@descricao,@tamanho,@dados,@order,@limit);";

				MySqlCommand cmd = new MySqlCommand(sql, con);
				cmd.Parameters.AddWithValue("@id", dto.Id);
				cmd.Parameters.AddWithValue("@nome", dto.Nome);
				cmd.Parameters.AddWithValue("@descricao", dto.Descricao);
				cmd.Parameters.AddWithValue("@tamanho", dto.Tamanho);
				cmd.Parameters.AddWithValue("@dados", dto.Dados);
				cmd.Parameters.AddWithValue("@order", order);
				cmd.Parameters.AddWithValue("@limit", 1);

				con.Open();
				MySqlDataReader dr;

				dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

				if (dr.Read())
				{
					dto.Id = Convert.ToInt32(dr["idAnexo"]);
					dto.Nome = dr["nome"].ToString();
					dto.Descricao = dr["descricao"].ToString();
					dto.Tamanho = Convert.ToUInt32(dr["tamanho"]);
                    dto.Dados = DBNull.Value.Equals(dr["dados"]) ? (byte[])null : (byte[])(dr["dados"]);
                      
				}
				else dto = null;

				return dto;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}

		public List<AnexoDTO> SelectAll(AnexoDTO dto, string order = null, int limit = 1000)
		{
			try
			{
				string sql = "CALL sp_anexo_sel(@id,@nome,@descricao,@tamanho,@dados,@order,@limit);";

				var lista = new List<AnexoDTO>();

				MySqlCommand cmd = new MySqlCommand(sql, con);
				cmd.Parameters.AddWithValue("@id", dto.Id);
				cmd.Parameters.AddWithValue("@nome", dto.Nome);
				cmd.Parameters.AddWithValue("@descricao", dto.Descricao);
				cmd.Parameters.AddWithValue("@tamanho", dto.Tamanho);
				cmd.Parameters.AddWithValue("@dados", dto.Dados);
				cmd.Parameters.AddWithValue("@order", order);
				cmd.Parameters.AddWithValue("@limit", 1);

				con.Open();
				MySqlDataReader dr;

				dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

				while (dr.Read())
				{
					var item = new AnexoDTO();
                    item.Id = Convert.ToInt32(dr["idAnexo"]);
					item.Nome = dr["nome"].ToString();
					item.Descricao = dr["descricao"].ToString();
					item.Tamanho = Convert.ToUInt32(dr["tamanho"]);
					item.Dados = (byte[])dr["dados"];
					lista.Add(item);
				}

				return lista;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}


		public void Insert(AnexoDTO dto)
		{
			try
			{
				String sql = @"CALL sp_anexo_ins(@nome,@descricao,@tamanho,@dados);";

				MySqlCommand cmd = new MySqlCommand(sql, con);

				cmd.Parameters.AddWithValue("@nome", dto.Nome);
				cmd.Parameters.AddWithValue("@descricao", dto.Descricao);
				cmd.Parameters.AddWithValue("@tamanho", dto.Tamanho);
				cmd.Parameters.AddWithValue("@dados", dto.Dados);

                con.Open();
                cmd.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
		}

		public void Update(AnexoDTO dto)
		{
			try
			{
				String sql = "CALL sp_anexo_upd(@id,@nome,@descricao,@tamanho,@dados);";

				MySqlCommand cmd = new MySqlCommand(sql, con);

				cmd.Parameters.AddWithValue("@id", dto.Id);
				cmd.Parameters.AddWithValue("@nome", dto.Nome);
				cmd.Parameters.AddWithValue("@descricao", dto.Descricao);
				cmd.Parameters.AddWithValue("@tamanho", dto.Tamanho);
				cmd.Parameters.AddWithValue("@dados", dto.Dados);

				con.Open();
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}

		public void Delete(AnexoDTO dto)
		{
			try
			{
				String sql = "CALL sp_anexo_del(@id);";

				MySqlCommand cmd = new MySqlCommand(sql, con);

				cmd.Parameters.AddWithValue("@id", dto.Id);
				con.Open();
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}
	}
}
